﻿Imports AccesoDatos
Imports Microsoft.Office.Interop
Imports System.Drawing
Public Class MultiUsuario

#Region "Stephan"

    ''' <summary>
    ''' Realiza la busqueda de todos los empleados que poseen un salario variable
    ''' </summary>
    ''' <returns>Lista de usuarios</returns>
    ''' <remarks>Creador por: Stephan Endres, Fecha: 06/07/2010, Modificado: 06/07/2010.</remarks>
    Public Shared Function buscarUsuarioPorTipoVariable() As List(Of Usuario)
        Dim dr As IDataReader
        Dim objUsuario As Usuario = Nothing
        Dim listaUsuario As New List(Of Usuario)

        Dim sql As String

        sql = "select * from t_usuario as u join t_puesto as p on u.puesto = p.codigo where p.tipo_salario <> 1 and u.eliminado = 0"

        dr = g_access.ejecutarQuery(sql)

        While dr.Read()
            With dr
                objUsuario = cargarUsuario(dr)
                listaUsuario.Add(objUsuario)
            End With
        End While

        Return listaUsuario
    End Function

    ''' <summary>
    ''' Realiza la busqueda de aquellos usuarios que poseen un salario fijo
    ''' </summary>
    ''' <returns>Lista de ususarios</returns>
    ''' <remarks>Creador por: Stephan Endres, Fecha: 06/07/2010, Modificado: 06/07/2010.</remarks>
    Public Shared Function buscarUsuariosSalarioFijo() As List(Of Usuario)
        Dim dr As IDataReader
        Dim objUsuario As Usuario = Nothing
        Dim listaUsuario As New List(Of Usuario)

        Dim sql As String

        sql = "select * from t_usuario as u join t_puesto as p on u.puesto = p.codigo where p.tipo_salario = 1 and u.eliminado = 0"

        dr = g_access.ejecutarQuery(sql)

        While dr.Read()
            With dr
                objUsuario = cargarUsuario(dr)
                listaUsuario.Add(objUsuario)
            End With
        End While

        Return listaUsuario
    End Function

#End Region

#Region "Elías Baldioceda"
    ''' <summary>
    ''' Registra un usuario.
    ''' </summary>
    ''' <param name="p_tipoId">Tipo de identificación.</param>
    ''' <param name="p_identificacion">Identificación.</param>
    ''' <param name="p_nombre">Nombre.</param>
    ''' <param name="p_primerApellido">Primero apellido.</param>
    ''' <param name="p_segundoApellido">Segundo apellido.</param>
    ''' <param name="p_nombreUsuario">Nombre de usuario.</param>
    ''' <param name="p_contrasenna">Contraseña.</param>
    ''' <param name="p_genero">Género.</param>
    ''' <param name="p_fechaNacimiento">Fecha de nacimiento.</param>
    ''' <param name="p_correo">Correo electrónico.</param>
    ''' <param name="p_telefono">Teléfono.</param>
    ''' <param name="p_rol">Código del rol.</param>
    ''' <param name="p_foto">Bytes de la foto.</param>
    ''' <param name="p_curriculo">Bytes del currículo.</param>
    '''  <param name="p_puesto">Código del puesto.</param>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 14/06/2010, Modificado: 18/06/2010</remarks>
    Public Shared Sub registrar(ByVal p_tipoId As String, ByVal p_identificacion As String, ByVal p_nombre As String, _
                                ByVal p_primerApellido As String, ByVal p_segundoApellido As String, ByVal p_nombreUsuario As String, _
                                ByVal p_contrasenna As String, ByVal p_genero As Boolean, ByVal p_fechaNacimiento As Date, _
                                ByVal p_correo As String, ByVal p_telefono As String, ByVal p_rol As Integer, _
                                ByVal p_foto() As Byte, ByVal p_curriculo() As Byte, ByVal p_puesto As Integer)
        Dim sql As String
        Dim pars(15) As Parametro

        ' Agrega el usuario.
        sql = "INSERT INTO t_usuario (tipo_identificacion, identificacion, nombre, primer_apellido, segundo_apellido, " & _
                "nombre_usuario, contrasenna, genero, fecha_nacimiento, correo_electronico, telefono, rol, foto, curriculo, fecha_ingreso, puesto) VALUES " & _
                "(p_tipoId, p_identificacion , p_nombreE, p_primerApellido, p_segundoApellido, p_nombreUsuario, " & _
                "p_contrasenna, p_genero, p_fechaNacimiento, p_correo, p_telefono, p_rol, p_foto, p_curriculo, p_fechaIngreso, p_puesto);"
        pars(0) = New Parametro("p_tipoId", p_tipoId)
        pars(1) = New Parametro("p_identificacion", p_identificacion)
        pars(2) = New Parametro("p_nombreE", p_nombre)
        pars(3) = New Parametro("p_primerApellido", p_primerApellido)
        pars(4) = New Parametro("p_segundoApellido", p_segundoApellido)
        pars(5) = New Parametro("p_nombreUsuario", p_nombreUsuario)
        pars(6) = New Parametro("p_contrasenna", p_contrasenna)
        pars(7) = New Parametro("p_genero", p_genero)
        pars(8) = New Parametro("p_fechaNacimiento", p_fechaNacimiento)
        pars(9) = New Parametro("p_correo", p_correo)
        pars(10) = New Parametro("p_telefono", p_telefono)
        pars(11) = New Parametro("p_rol", p_rol)
        pars(12) = New Parametro("p_foto", p_foto)
        pars(13) = New Parametro("p_curriculo", p_curriculo)
        pars(14) = New Parametro("p_fechaIngreso", Date.Now)
        pars(15) = New Parametro("p_puesto", p_puesto)

        g_access.ejecutarSQL(sql, pars)

        ' Agrega la bonficación.
        ReDim pars(0)

        sql = "INSERT INTO t_bonificacion (codigo_empleado, bonificacion_meta, bonificacion_general) VALUES (p_identificacion, 0, 0);"
        pars(0) = New Parametro("p_identificacion", p_identificacion)

        g_access.ejecutarSQL(sql, pars)
    End Sub

    ''' <summary>
    ''' Modifica un usuario.
    ''' </summary>
    ''' <param name="p_tipoId">Tipo de identificación.</param>
    ''' <param name="p_identificacion">Identificación.</param>
    ''' <param name="p_nombre">Nombre.</param>
    ''' <param name="p_primerApellido">Primero apellido.</param>
    ''' <param name="p_segundoApellido">Segundo apellido.</param>
    ''' <param name="p_genero">Género.</param>
    ''' <param name="p_fechaNacimiento">Fecha de nacimiento.</param>
    ''' <param name="p_correo">Correo electrónico.</param>
    ''' <param name="p_telefono">Teléfono.</param>
    ''' <param name="p_rol">Código del rol.</param>
    ''' <param name="p_foto">Bytes de la foto.</param>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 14/06/2010, Modificado: 18/06/2010</remarks>
    Public Shared Sub modificar(ByVal p_tipoId As String, ByVal p_identificacion As String, ByVal p_nombre As String, _
                                ByVal p_primerApellido As String, ByVal p_segundoApellido As String, _
                                ByVal p_genero As Boolean, ByVal p_fechaNacimiento As Date, _
                                ByVal p_correo As String, ByVal p_telefono As String, ByVal p_rol As Integer, _
                                ByVal p_foto() As Byte)
        Dim sql As String
        Dim pars(10) As Parametro

        sql = "UPDATE t_usuario SET tipo_identificacion=p_tipoId, nombre=p_nombreE, primer_apellido=p_primerApellido, segundo_apellido=p_segundoApellido, " & _
                "genero=p_genero, fecha_nacimiento=p_fechaNacimiento, correo_electronico=p_correo, telefono=p_telefono, rol=p_rol, foto=p_foto " & _
                "WHERE identificacion=p_identificacion;"
        pars(0) = New Parametro("p_tipoId", p_tipoId)
        pars(1) = New Parametro("p_identificacion", p_identificacion)
        pars(2) = New Parametro("p_nombreE", p_nombre)
        pars(3) = New Parametro("p_primerApellido", p_primerApellido)
        pars(4) = New Parametro("p_segundoApellido", p_segundoApellido)
        pars(5) = New Parametro("p_genero", p_genero)
        pars(6) = New Parametro("p_fechaNacimiento", p_fechaNacimiento)
        pars(7) = New Parametro("p_correo", p_correo)
        pars(8) = New Parametro("p_telefono", p_telefono)
        pars(9) = New Parametro("p_rol", p_rol)
        pars(10) = New Parametro("p_foto", p_foto)

        g_access.ejecutarSQL(sql, pars)
    End Sub

    ''' <summary>
    ''' Comprueba si el nombre de usuario ya está en uso.
    ''' </summary>
    ''' <param name="p_nombreUsuario">Nombre de usuario.</param>
    ''' <returns>Si el nombre de usuario está en uso.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 18/06/2010, Modificado: 18/06/2010</remarks>
    Public Shared Function existeNombreUsuario(ByVal p_nombreUsuario As String) As Boolean
        Dim sql As String
        Dim pars(0) As Parametro
        Dim data As IDataReader

        sql = "SELECT nombre_usuario FROM t_usuario WHERE nombre_usuario=p_nombreUsuario;"
        pars(0) = New Parametro("p_nombreUsuario", p_nombreUsuario)

        data = g_access.ejecutarQuery(sql, pars)

        Return data.Read()
    End Function

    ''' <summary>
    ''' Comprueba si queda más de un usuario con el rol de administrador para poder eliminarlo.
    ''' </summary>
    ''' <returns>Si puede eliminar un usuario.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 05/07/2010, Modificado: 05/07/2010</remarks>
    Public Shared Function puedeEliminarAdmin() As Boolean
        Dim sql As String
        Dim pars(0) As Parametro
        Dim data As IDataReader
        Dim puede As Boolean = False

        sql = "SELECT COUNT(*) As admins FROM t_usuario WHERE rol=1;"

        data = g_access.ejecutarQuery(sql)

        If data.Read() Then
            If data.Item("admins") > 1 Then
                puede = True
            End If
        End If

        Return puede
    End Function

    ''' <summary>
    ''' Comprueba si ya hay un gerente general.
    ''' </summary>
    ''' <returns>Si hay gerente general.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 05/07/2010, Modificado: 05/07/2010</remarks>
    Public Shared Function hayGerenteGeneral() As Boolean
        Dim sql As String
        Dim pars(0) As Parametro
        Dim data As IDataReader
        Dim hay As Boolean = False

        sql = "SELECT COUNT(*) As gg FROM t_usuario WHERE rol=2;"

        data = g_access.ejecutarQuery(sql)

        If data.Read() Then
            If data.Item("gg") > 1 Then
                hay = True
            End If
        End If

        Return hay
    End Function

    ''' <summary>
    ''' Identifica si el usuario existe.
    ''' </summary>
    ''' <param name="p_nombreUsuario">Nombre de usuario.</param>
    ''' <param name="p_contrasenna">Contraseña.</param>
    ''' <returns>El usuario identificado.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 19/06/2010, Modificado: 19/06/2010</remarks>
    Public Shared Function identificar(ByVal p_nombreUsuario As String, ByVal p_contrasenna As String) As Usuario
        Dim sql As String
        Dim pars(1) As Parametro
        Dim data As IDataReader
        Dim usuario As Usuario = Nothing

        sql = "SELECT * FROM t_usuario WHERE nombre_usuario=p_nombreUsuario AND contrasenna=p_contrasenna AND eliminado=0;"
        pars(0) = New Parametro("p_nombreUsuario", p_nombreUsuario)
        pars(1) = New Parametro("p_contrasenna", p_contrasenna)

        data = g_access.ejecutarQuery(sql, pars)

        If data.Read() Then
            usuario = cargarUsuario(data)
        End If

        Return usuario
    End Function

    ''' <summary>
    ''' Busca un usuario.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <returns>Un usuario.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Public Shared Function buscar(ByVal p_identificacion As String) As Usuario
        Dim sql As String
        Dim pars(0) As Parametro
        Dim data As IDataReader
        Dim usuario As Usuario = Nothing

        sql = "SELECT * FROM t_usuario WHERE identificacion=p_identificacion AND eliminado=0"
        pars(0) = New Parametro("p_identificacion", p_identificacion)

        data = g_access.ejecutarQuery(sql, pars)

        While data.Read()
            usuario = cargarUsuario(data)
        End While

        Return usuario
    End Function

    ''' <summary>
    ''' Busca los usuarios.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <param name="p_nombre">Nombre y/o apellidos.</param>
    ''' <returns>Lista de usuarios.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 19/06/2010, Modificado: 20/06/2010</remarks>
    Public Shared Function buscar(ByVal p_identificacion As String, ByVal p_nombre As String) As List(Of Usuario)
        Dim sql As String
        Dim pars(1) As Parametro
        Dim data As IDataReader
        Dim usuario As Usuario
        Dim usuarios As New List(Of Usuario)

        sql = "SELECT * FROM t_usuario WHERE identificacion LIKE p_identificacion AND (nombre + ' ' + primer_apellido + ' ' + segundo_apellido) LIKE p_nombre AND eliminado=0"
        pars(0) = New Parametro("p_identificacion", "%" & p_identificacion & "%")
        pars(1) = New Parametro("p_nombre", "%" & p_nombre & "%")

        data = g_access.ejecutarQuery(sql, pars)

        While data.Read()
            usuario = cargarUsuario(data)
            usuarios.Add(usuario)
        End While

        Return usuarios
    End Function

    ''' <summary>
    ''' Obtiene la foto del usuario.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <returns>Foto del usuario.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Public Shared Function obtenerFoto(ByVal p_identificacion As String) As Bitmap
        Dim sql As String
        Dim pars(0) As Parametro
        Dim data As IDataReader
        Dim foto As Bitmap = Nothing

        sql = "SELECT foto FROM t_usuario WHERE identificacion=p_identificacion AND eliminado=0"
        pars(0) = New Parametro("p_identificacion", p_identificacion)

        data = g_access.ejecutarQuery(sql, pars)

        While data.Read()
            foto = Utils.byte2Object(data.Item("foto"))
        End While

        Return foto
    End Function

    ''' <summary>
    ''' Elimina un usuario.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Public Shared Sub eliminar(ByVal p_identificacion As String)
        Dim sql As String
        Dim pars(0) As Parametro

        sql = "UPDATE t_usuario SET eliminado=1 WHERE identificacion=p_identificacion;"
        pars(0) = New Parametro("p_identificacion", p_identificacion)

        g_access.ejecutarSQL(sql, pars)
    End Sub

    ''' <summary>
    ''' Cambia el estado de un usuario.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <param name="p_estado">Estado.</param>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Public Shared Sub cambiarEstado(ByVal p_identificacion As String, ByVal p_estado As Estado)
        Dim sql As String
        Dim pars(1) As Parametro

        sql = "UPDATE t_usuario SET estado=p_estado WHERE identificacion=p_identificacion;"
        pars(0) = New Parametro("p_identificacion", p_identificacion)
        pars(1) = New Parametro("p_estado", p_estado)

        g_access.ejecutarSQL(sql, pars)
    End Sub

    ''' <summary>
    ''' Modifica las vacaciones de un empleado.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <param name="p_vacaciones">Número de vacaciones utilizadas.</param>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 23/06/2010, Modificado: 23/06/2010</remarks>
    Public Shared Sub modificarVacaciones(ByVal p_identificacion As String, ByVal p_vacaciones As Integer)
        Dim sql As String
        Dim pars(1) As Parametro

        sql = "UPDATE t_usuario SET vacaciones=p_vacaciones WHERE identificacion=p_identificacion;"
        pars(0) = New Parametro("p_identificacion", p_identificacion)
        pars(1) = New Parametro("p_vacaciones", p_vacaciones)

        g_access.ejecutarSQL(sql, pars)
    End Sub

    ''' <summary>
    ''' Liquida un empleado.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <param name="p_vacaciones">Cantidad a pagar de vacaciones.</param>
    ''' <param name="p_preaviso">Cantidad a pagar de preaviso.</param>
    ''' <param name="p_cesantia">Cantidad a pagar de cesantia.</param>
    ''' <param name="p_aguinaldo">Cantidad a pagar de aguinaldo.</param>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 23/06/2010, Modificado: 23/06/2010</remarks>
    Public Shared Sub liquidar(ByVal p_identificacion As String, ByVal p_vacaciones As Double, _
                               ByVal p_preaviso As Double, ByVal p_cesantia As Double, _
                               ByVal p_aguinaldo As Double)
        Dim sql As String
        Dim pars(5) As Parametro

        sql = "INSERT INTO t_liquidacion (codigo_empleado, vacaciones, preaviso, cesantia, aguinaldo, fecha) VALUES " & _
              "(p_identificacion, p_vacaciones, p_preaviso, p_cesantia, p_aguinaldo, p_fecha);"
        pars(0) = New Parametro("p_identificacion", p_identificacion)
        pars(1) = New Parametro("p_vacaciones", p_vacaciones)
        pars(2) = New Parametro("p_preaviso", p_preaviso)
        pars(3) = New Parametro("p_cesantia", p_cesantia)
        pars(4) = New Parametro("p_aguinaldo", p_aguinaldo)
        pars(5) = New Parametro("p_fecha", Date.Now())

        g_access.ejecutarSQL(sql, pars)
    End Sub

    ''' <summary>
    ''' Verifica si el usuario tiene el permiso indicado.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <param name="p_permiso">Código del permiso.</param>
    ''' <returns>Si el usuario tiene el permiso.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 27/04/2010, Modificado: 27/04/2010</remarks>
    Public Shared Function tienePermiso(ByVal p_identificacion As String, ByVal p_permiso As Integer) As Boolean
        Dim cnx As IDbConnection
        Dim data As IDataReader
        Dim sql As String
        Dim pars(1) As Parametro
        Dim tiene As Boolean = False

        sql = "SELECT COUNT(*) AS tiene FROM t_permiso AS p " & _
            "INNER JOIN t_permiso_rol AS pr ON pr.id_permiso=p.id " & _
            "INNER JOIN t_rol AS r ON r.id=pr.id_rol INNER JOIN t_usuario AS u ON u.rol=r.id " & _
            "WHERE u.identificacion=p_identificacion AND p.id=p_permiso AND u.eliminado=0"
        cnx = g_access.getConnection

        pars(0) = New Parametro("p_identificacion", p_identificacion)
        pars(1) = New Parametro("p_permiso", p_permiso)

        data = g_access.ejecutarQuery(sql, pars)

        If data.Read Then
            If data.Item("tiene") > 0 Then
                tiene = True
            End If
        End If

        cnx.Close()
        Return tiene
    End Function

    ''' <summary>
    ''' Verifica si el usuario es director de algún departamento.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <returns>Si el usuario es director de algún departamento.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 06/07/2010, Modificado: 06/07/2010</remarks>
    Public Shared Function esDirectorDepartamento(ByVal p_identificacion As String) As Boolean
        Dim sql As String
        Dim pars(0) As Parametro
        Dim data As IDataReader
        Dim esDirector As Boolean = False

        sql = "SELECT director FROM t_departamento WHERE director=p_identificacion;"
        pars(0) = New Parametro("p_identificacion", p_identificacion)

        data = g_access.ejecutarQuery(sql, pars)

        If data.Read() Then
            esDirector = True
        End If

        Return esDirector
    End Function

    ''' <summary>
    ''' Carga los datos obtenidos de la base de datos en un usuario.
    ''' </summary>
    ''' <param name="p_dr">Datos obtenidos de la base de datos.</param>
    ''' <returns>Un usuario.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 19/06/2010, Modificado: 19/06/2010</remarks>
    Private Shared Function cargarUsuario(ByVal p_dr As IDataReader) As Usuario
        Dim usuario As New Usuario

        ' Define los atributos del usuario.
        usuario.nombre = p_dr.Item("nombre")
        usuario.primerApellido = p_dr.Item("primer_apellido")
        usuario.segundoApellido = p_dr.Item("segundo_apellido")
        usuario.tipoIdentificacion = p_dr.Item("tipo_identificacion")
        usuario.identificacion = p_dr.Item("identificacion")
        usuario.fechaNacimiento = p_dr.Item("fecha_nacimiento")
        usuario.telefono = p_dr.Item("telefono")
        usuario.correo = p_dr.Item("correo_electronico")
        usuario.nombreUsuario = p_dr.Item("nombre_usuario")
        usuario.contrasenna = p_dr.Item("contrasenna")
        usuario.fechaIngreso = p_dr.Item("fecha_ingreso")
        usuario.estado = p_dr.Item("estado")
        usuario.vacaciones = p_dr.Item("vacaciones")
        usuario.estadoCurriculo = p_dr.Item("estado_curriculo")
        usuario.rol = p_dr.Item("rol")

        ' Pasa el género a String.
        If p_dr.Item("genero") Then
            usuario.genero = "Femenino"
        Else
            usuario.genero = "Masculino"
        End If

        ' En caso de tener un puesto asignarlo al usuario.
        If Not TypeOf p_dr.Item("puesto") Is DBNull Then
            usuario.puesto = MultiPuesto.obtener(p_dr.Item("puesto"))
        End If

        Return usuario
    End Function
#End Region

#Region "David Murillo"

    ''' <summary>
    ''' Busca los todos los usuarios (Jefes)
    ''' </summary>
    ''' <returns>Lista con usuarios</returns>
    ''' <remarks>Creado por: David Murillo, Creado: 18/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Function buscarDirectores() As List(Of Usuario)

        Dim sql As String
        Dim drDirectores As IDataReader
        Dim listaDirectores As New List(Of Usuario)

        sql = "select identificacion, nombre, primer_apellido, segundo_apellido, puesto from t_usuario"

        drDirectores = g_access.ejecutarQuery(sql)

        While drDirectores.Read()
            listaDirectores.Add(cargarDirectores(drDirectores))
        End While

        Return listaDirectores

    End Function

    ''' <summary>
    ''' Instancia los usuarios(Jefes)
    ''' </summary>
    ''' <param name="p_data">Datos</param>
    ''' <returns>Usuario</returns>
    ''' <remarks>Creado por: David Murillo, Creado: 18/06/2010, Modificado: 30/06/2010</remarks>
    Private Shared Function cargarDirectores(ByVal p_data As IDataReader) As Usuario

        Dim usuario As New Usuario

        usuario.identificacion = p_data.Item("identificacion")
        usuario.nombre = p_data.Item("nombre")
        usuario.primerApellido = p_data.Item("primer_apellido")
        usuario.segundoApellido = p_data.Item("segundo_apellido")

        If Not TypeOf p_data.Item("puesto") Is DBNull Then
            usuario.puesto = MultiPuesto.obtener(p_data.Item("puesto"))
        End If

        Return usuario

    End Function

    ''' <summary>
    ''' Obtiene la contraseña de un usuario dado.
    ''' </summary>
    ''' <param name="p_idUsuario">Cédula del usuario</param>
    ''' <returns>Contraseña encriptada</returns>
    ''' <remarks>Creado por: David Murillo, Creado: 18/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Function obtenerContrasenna(ByVal p_idUsuario As String) As String

        Dim passUsuario As String = Nothing
        Dim sql As String
        Dim drPass As IDataReader
        Dim pars(0) As Parametro

        sql = "select contrasenna from t_usuario where identificacion=p_idUsuario"

        pars(0) = New Parametro("p_idUsuario", p_idUsuario)

        drPass = g_access.ejecutarQuery(sql, pars)

        While drPass.Read
            passUsuario = drPass.Item("contrasenna")
        End While

        Return passUsuario

    End Function

    ''' <summary>
    ''' Modifica la contraseña de un usuario.
    ''' </summary>
    ''' <param name="p_contrasennaNueva">Contraseña nueva</param>
    ''' <param name="p_idUsuario">Cédula del usuario</param>
    ''' <remarks>Creado por: David Murillo, Creado: 18/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Sub modificarContrasenna(ByVal p_contrasennaNueva As String, ByVal p_idUsuario As String)

        Dim sql As String
        Dim pars(1) As Parametro

        sql = "update t_usuario set contrasenna=p_contrasennaNueva where identificacion=p_idUsuario"

        pars(0) = New Parametro("p_contrasennaNueva", p_contrasennaNueva)
        pars(1) = New Parametro("p_idUsuario", p_idUsuario)

        g_access.ejecutarSQL(sql, pars)

    End Sub

    ''' <summary>
    ''' Obtiene la fecha de nacimiento con el nombre de usuario
    ''' </summary>
    ''' <param name="p_nombreUsuario">Nombre de usuario</param>
    ''' <returns>Fecha de nacimiento</returns>
    ''' <remarks>Creado por: David Murillo, Creado: 18/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Function obtenerFechaNacimiento(ByVal p_nombreUsuario As String) As Date

        Dim sql As String
        Dim fechaNac As Date
        Dim pars(0) As Parametro
        Dim drDato As IDataReader

        sql = "select fecha_nacimiento from t_usuario where nombre_usuario = p_nombreUsuario"

        pars(0) = New Parametro("p_nombreUsuario", p_nombreUsuario)

        drDato = g_access.ejecutarQuery(sql, pars)

        While drDato.Read
            fechaNac = drDato.Item("fecha_nacimiento")
        End While

        Return fechaNac

    End Function

    ''' <summary>
    ''' Obtiene el correo electrónico con el nombre de un usuario
    ''' </summary>
    ''' <param name="p_nombreUsuario">Nombre de usuario</param>
    ''' <returns>Correo electrónico</returns>
    ''' <remarks>Creado por: David Murillo, Creado: 18/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Function obtenerCorreo(ByVal p_nombreUsuario As String) As String

        Dim sql As String
        Dim pars(0) As Parametro
        Dim drDatos As IDataReader
        Dim correo As String = Nothing

        sql = "select correo_electronico from t_usuario where nombre_usuario = p_nombreUsuario"

        pars(0) = New Parametro("p_nombreUsuario", p_nombreUsuario)

        drDatos = g_access.ejecutarQuery(sql, pars)

        While drDatos.Read
            correo = drDatos.Item("correo_electronico")
        End While

        Return correo

    End Function

    ''' <summary>
    ''' Actualiza la contraseña de un usuario mediante el nombre de éste.
    ''' </summary>
    ''' <param name="p_contrasennaNueva">Contraseña nueva</param>
    ''' <param name="p_nombreUsuario">Nombre de usuario</param>
    ''' <remarks>Creado por: David Murillo, Creado: 18/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Sub actualizarContrasenna(ByVal p_contrasennaNueva As String, ByVal p_nombreUsuario As String)

        Dim sql As String
        Dim pars(1) As Parametro

        sql = "update t_usuario set contrasenna=p_contrasennaNueva where nombre_usuario=p_nombreUsuario"

        pars(0) = New Parametro("p_contrasennaNueva", p_contrasennaNueva)
        pars(1) = New Parametro("p_nombreUsuario", p_nombreUsuario)

        g_access.ejecutarSQL(sql, pars)

    End Sub

    ''' <summary>
    ''' Obtiene el currículo del usuario.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <returns>Currículo del usuario.</returns>
    ''' <remarks>Creado por: David Murillo, Creado: 18/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Function obtenerCurriculo(ByVal p_identificacion As String) As Word.Document
        Dim sql As String
        Dim pars(0) As Parametro
        Dim data As IDataReader
        Dim curriculo As Word.Document = Nothing

        sql = "SELECT curriculo FROM t_usuario WHERE identificacion=p_identificacion"
        pars(0) = New Parametro("p_identificacion", p_identificacion)

        data = g_access.ejecutarQuery(sql, pars)

        While data.Read()
            curriculo = New Word.Document()
            curriculo.Content.InsertXML(Utils.byte2Object(data.Item("curriculo")))
        End While

        Return curriculo
    End Function

    ''' <summary>
    ''' Prueba subir curriculo NO METER ENTRE MIS PARTES SOLO PRUEBAS
    ''' </summary>
    ''' <param name="p_curriculo"></param>
    ''' <remarks></remarks>
    Public Shared Sub subirCurriculo(ByVal p_curriculo() As Byte)

        Dim sql As String
        Dim pars(0) As Parametro

        sql = "update t_usuario set curriculo=p_curriculo where identificacion='114320719'"

        pars(0) = New Parametro("p_curriculo", p_curriculo)

        g_access.ejecutarSQL(sql, pars)

    End Sub

    ''' <summary>
    ''' Revisa si hay un usuario enlazado a un puesto.
    ''' </summary>
    ''' <param name="p_codigoPuesto">Código puesto</param>
    ''' <returns>True si está enlazado, false si no</returns>
    ''' <remarks>Creado por: David Murillo, Creado: 18/06/2010, Modificado: 30/06/2010</remarks>
    Public Shared Function revisarUsuarioEnPuesto(ByVal p_codigoPuesto) As Boolean
        Dim sql = "SELECT identificacion FROM t_usuario WHERE puesto = p_codigoPuesto"
        Dim pars(0) As AccesoDatos.Parametro
        Dim dr As IDataReader

        pars(0) = New AccesoDatos.Parametro("p_codigoPuesto", p_codigoPuesto)

        dr = g_access.ejecutarQuery(sql, pars)

        Return dr.Read()

    End Function

#End Region

#Region "Roberto"
    ''' <summary>
    ''' Modifica el puesto de un empleado determinado.
    ''' </summary>
    ''' <param name="p_codigo">Codigo.</param>
    ''' <param name="p_puesto">Codigo Puesto.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 22/06/2010</remarks>
    Public Shared Sub modificarPuestoEmpleado(ByVal p_codigo As String, ByVal p_puesto As Integer)
        Dim pars(1) As AccesoDatos.Parametro
        Dim sql As String

        sql = "UPDATE t_usuario SET puesto = p_puesto WHERE identificacion = p_codigo"

        pars(0) = New AccesoDatos.Parametro("p_codigo", p_codigo)
        pars(1) = New AccesoDatos.Parametro("p_puesto", p_puesto)

        g_access.ejecutarSQL(sql, pars)
    End Sub
#End Region

#Region "chaves"

    ''' <summary>
    ''' Obtiene el ID del usuario relacionado a un Puesto
    ''' </summary>
    ''' <param name="p_codigoPuesto"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function obtenerIDUsuarioPorCodigoPuesto(ByVal p_codigoPuesto) As Integer
        Dim sql = "SELECT identificacion FROM t_usuario WHERE puesto = codigoPuesto"
        Dim pars(0) As AccesoDatos.Parametro
        Dim dr As IDataReader = Nothing
        Dim idUsuario = 0
        pars(0) = New AccesoDatos.Parametro("codigoPuesto", p_codigoPuesto)
        Try
            dr = g_access.ejecutarQuery(sql, pars)
        Catch ex As Exception
        End Try
        If dr.Read Then
            idUsuario = dr.Item("identificacion")
        End If
        Return idUsuario
    End Function

    ''' <summary>
    ''' Obtiene el rol de un usuario a partir del ID
    ''' </summary>
    ''' <param name="p_id"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function obtenerRolPorID(ByVal p_id As String) As String
        Dim sql = "SELECT rol FROM t_usuario WHERE identificacion = p_id"
        Dim pars(0) As AccesoDatos.Parametro
        Dim dr As IDataReader = Nothing
        Dim rol = 0
        pars(0) = New AccesoDatos.Parametro("p_id", p_id)
        Try
            dr = g_access.ejecutarQuery(sql, pars)
        Catch ex As Exception
        End Try
        If dr.Read Then
            rol = dr.Item("rol")
        End If
        Return rol
    End Function

#End Region





End Class
